Next: Detecting a Project, Previous: Extending EDE, Up: Extending EDE [Contents]
EDE is made up of a series of classes implemented with EIEIO. These classes define an interface that can be used to create different types of projects.
EDE defines two superclasses which are
ede-project and ede-target. All
commands in EDE are usually meant to address the current
project, or current target.
All specific projects in EDE derive subclasses of the EDE superclasses. In this way, specific behaviors such as how a project is saved, or how a target is compiled can be customized by a project author in detail. EDE communicates to these project objects via an API using methods. The commands you use in EDE mode are high-level functional wrappers over these methods.
Some example project types are:
project-amAutomake project which reads existing Automake files.
ede-proj-projectThis project type will create Makefiles, or Makefile.am files to compile your project.
ede-linuxThis project type will detect linux source trees.
ede-emacsThis project will detect an Emacs source tree.
There are several other project types as well.
The first class you need to know to create a new project type
is ede-project-autoload. New instances of this class
are needed to define how Emacs associates different files/buffers
with different project types. All the autoloads are kept in the
variable ede-project-class-files.
The next most important class to know is
ede-project. This is the baseclass defines how all
projects behave. The basic pattern for a project is that there is
one project per directory, and the topmost project or directory
defines the project as a whole.
Key features of ede-project are things like name
and version number. It also holds a list of
ede-target objects and a list of sub projects, or
more ede-project objects.
New project types must subclass ede-project to
add special behavior. New project types also need to subclass
ede-target to add specialty behavior.
In this way, the common EDE interface is designed to
work against ede-project, and thus all
subclasses.
ede-project subclasses
ede-project-placeholder. This is the minimum
necessary project needed to be cached between runs of Emacs. This
way, Emacs can track all projects ever seen, without loading
those projects into memory.
Here is a high-level UML diagram for the EDE system created with COGRE..
+-----------------------+ +-----------------------+
| | |ede-project-placeholder|
|ede-project-class-files| +-----------------------+
| | +-----------------------+
+-----------------------+ +-----------------------+
/\ ^
\/ /_\
| |
+--------------------+ +-----------+ +----------+
|ede-project-autoload| |ede-project| |ede-target|
+--------------------+<>--------------+-----------+<>-------+----------+
+--------------------+ +-----------+ +----------+
+--------------------+ +-----------+ +----------+
^
/_\
|
+---------------------+-----------------+
| | |
| | |
| | |
+----------------+ +-------------------+ +---------+
|ede-proj-project| |project-am-makefile| |ede-emacs|
+----------------+ +-------------------+ +---------+
+----------------+ +-------------------+ +---------+
+----------------+ +-------------------+ +---------+
Next: Detecting a Project, Previous: Extending EDE, Up: Extending EDE [Contents]